/*Copyright (C) 2009 - 2011 Careil Baptiste

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef INPUT_HEADER_CURSES
# define INPUT_HEADER_CURSES

/* Permet de lire sur l'entree standard. Cette fonction retourne lorsque
** l'utilisateur appuie sur <entrer> ou si ret_on_touche_dir est different de 0
** et que l'utilisateur appuie sur <touche_gauche> ou <touche_droite>.
** Si chaine == NULL, curseur <= 0, curseur > longueur ou longeur <= 0, la
** fonction retourne 0.
**
** Lors de la saisie, si la touche est differente de K_RIGHT, K_LEFT,
** M_K_BACKSPACE, M_K_DELETE et, si ret_on_dir est different de 0,
** <touche_gauche> et <touche_droite>, alors la touche est passee a la fonction
** restrict, puis, si restrict(key) retourne une valeur differente de 0,
** ajoutee a la chaine de caractere.
**
** Cette fonction ne depassera pas `longueur' de caracteres ecrits dans la
** chaine, '\0' compris.
**
** Si curseur != 0, la chaine est affiche (de chaine[0] a chaine[curseur]
** compris) et peut etre edite.
**
** chaine : la chaine a remplire
** curseur : la position du curseur dans la chaine.
** longueur : le nombre de caractere maximum a ecrire dans la chaine,
**            '\0' compris
** restrict : la fonction qui va servir a valider les touches saisient.
** ret_on_touche_dir : indique si la fonction doit retourner le code de la
**                     touche si <touche_gauche> ou <touche_droite> est appuyee.
*/
int raw_read(char *chaine, int curseur, int longueur, int (*restrict)(int), int ret_on_touche_dir);

/* Cette fonction permet de lire l'entrée standard.
** Si l'utilisateur se contente d'appuyer sur <enter>, `chaine'
** sera vide (chaine[0] = '\0').
** Si `chaine' == NULL et/ou `longueur' == 0, lire() renvoit 0
**
** chaine : Un tableau de char déjà alloué.
** longueur : Le nombre d'octets à écrire dans `chaine'
** return : 0 en cas d'erreur
** 1 en cas de succès
*/
int lire(char *chaine, int longueur);

/* Cette fonction permet de lire l'entrée standard.
** Si l'utilisateur se contente d'appuyer sur <enter>, `nombreTexte'
** ne sera pas retourné.
**
** nombreTexte : Un tableau de char.
** longueur : Le nombre d'octets à écrire dans `nombreTexte'
** return le nombre contenu dans `nombreTexte'
*/
long lire_long(void);

/* Cette fonction permet de lire l'entrée standard.
** Si l'utilisateur se contente d'appuyer sur <enter>, `nombreTexte'
** ne sera pas retourné.
**
** nombreTexte : Un tableau de char.
** longueur : Le nombre d'octets à écrire dans `nombreTexte'
** return le nombre contenu dans `nombreTexte'
** ou
** return la direction pour changer de menu
*/
int lire_menu(void);

#endif /* !INPUT_HEADER_CURSES */

